Programmatische Anlage einer Klasse
I’d rather write code that writes code than write code
mir unbekannter Autor
Dieses Zitat passt sehr gut zu dem hier vorgestellten Code-Schnipsel. Mit diesem kleinen Programm zeige ich dir exemplarisch, wie man per Programm eine Klasse im Repository anlegen kann. Es wird die folgende Klasse angelegt:
CLASS zcl_test_007 DEFINITION PUBLIC CREATE PUBLIC. PUBLIC SECTION. INTERFACES zif_test . METHODS demo . PROTECTED SECTION. PRIVATE SECTION. ENDCLASS. CLASS zcl_test_007 IMPLEMENTATION. METHOD demo. * demo implementation ENDMETHOD. METHOD zif_test~if_test. * demo interface implementation ENDMETHOD. ENDCLASS.
Anlegen einer Klasse
Aber nun zu dem spannenden Teil: Der Anlage der Klasse. Es werden alle notwendigen Bestandteile mitgegeben. Bei den meisten verwendeten Tabellen des Bausteins SEO_CLASS_CREATE_COMPLETE beziehen sich auf Datenbankviews, so dass man einfach bei vorhandenen Klassen nachsehen kann, welche Attribute welche Werte erhalten sollten. In der Regel kann man dies auch über die Festwerte der jeweiligen Domäne erfahren.
Code
REPORT. TYPE-POOLS seoc. PARAMETERS pa_num TYPE num03 DEFAULT 1. START-OF-SELECTION. DATA t_attributes TYPE seoo_attributes_r. DATA t_methods TYPE seoo_methods_r. DATA t_method_sources TYPE seo_method_source_table. DATA t_interfaces TYPE seor_implementings_r. DATA s_class TYPE vseoclass. s_class = VALUE #( clsname = |ZCL_TEST_{ pa_num }| descript = |Test class number { pa_num }| langu = sy-langu exposure = 2 fixpt = abap_true state = 1 ). "implemented t_attributes = VALUE #( ( clsname = s_class-clsname cmpname = 'DEMO' descript = 'Demo attribute' exposure = 2 "public attdecltyp = 0 "instance state = 1 ) ). t_methods = VALUE #( ( clsname = s_class-clsname cmpname = 'DEMO' descript = 'demo method' langu = sy-langu exposure = 2 "public mtddecltyp = 0 "instance state = 1 ) ). t_method_sources = VALUE #( ( cpdname = 'DEMO' source = VALUE #( ( `* demo implementation` ) ) ) ( cpdname = 'ZIF_TEST~IF_TEST' source = VALUE #( ( `* demo interface implementation` ) ) ) ). t_interfaces = VALUE #( ( clsname = s_class-clsname refclsname = 'ZIF_TEST' exposure = 2 "public state = 1 reltype = 1 ) ). "Create class CALL FUNCTION 'SEO_CLASS_CREATE_COMPLETE' EXPORTING devclass = '$TMP' overwrite = space version = seoc_version_active suppress_dialog = abap_true " Parameter missing in 702 method_sources = t_method_sources CHANGING implementings = t_interfaces class = s_class attributes = t_attributes methods = t_methods EXCEPTIONS existing = 1 is_interface = 2 db_error = 3 component_error = 4 no_access = 5 other = 6 OTHERS = 7. WRITE: / sy-subrc.
- Meine Eclipse-Plugins - 22. November 2024
- Interview mit Björn Schulz (Software-Heroes.com) - 3. September 2024
- Daten aus ALV ermitteln - 3. September 2024